package com.sn.utils;

import com.sn.pojo.News;
import com.sn.pojo.NewsItem;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class NanTiUtils {
    //南体大学的新闻爬取工具类
    //工具类只负责爬取内容,不负责插入数据库，即不会生成id
    private String uri = "https://www.nipes.cn/ntxw/list"+page+".htm";//https://www.nipes.cn/ntxw/list2.htm
    private static int page=1;
    public List<News> getNews() {
        //使用工具类获取client连接池,获取client对象来请求网页
        PoolingHttpClient httpClient=new PoolingHttpClient();
        String content = httpClient.doGetHtml(uri);
        System.out.println("是否进行了翻页?南体"+page);
        System.out.println("uri 南体"+uri);
        page++;
        List<News>newsList=new ArrayList<>();
        //直接使用jsoup解析content
        Document doc = Jsoup.parse(content);
        //首先获取南体大学新闻的分类
        String category = doc.getElementsByClass("col_title").text();
        //经过分析 得知南体大学的首页新闻 包裹在<ul class="news_list list2">里面
        //ul包含了若干个li
        //li标签里面span包裹了a标签
        /*
        <span class="news_title">
        <a href='/c9/22/c2348a51490/page.htm' target='_blank' title='南京体育学院新闻专业毕业生参加冬奥会报道'>
        南京体育学院新闻专业毕业生参加冬奥会报道
        </a>
        </span>
        <span class="news_meta">2022-02-25</span>
         */
        //第一步先获取ul标签
        Elements news_list_list2 = doc.getElementsByClass("news_list list2");
        //第二步，获取ul里面的li标签集合
        Element ul = news_list_list2.first();
        Elements lis = ul.getElementsByTag("li");
        for (Element li : lis) {
            //第三步获取a标签
            Elements a = li.getElementsByTag("a");
            String href = a.attr("href");//得到链接 此时的链接需要拼接 https://www.nipes.cn
            href="https://www.nipes.cn"+href;
            String title = a.text();//得到标题
            News news=new News();
//            System.out.println("标题:"+title+"  链接"+href);
            news.setNHref(href);//设置链接
            news.setNTitle(title);//设置标题
            news.setSId(4);//设置学校id
            news.setNGetTime(Tools.getFormatDate(new Date()));//设置爬取时间
            news.setNCategory(category);//设置标题
            newsList.add(news);
        }

        return newsList;
    }



    public NewsItem getItem(String iUri){
        //使用工具类获取client连接池,获取client对象来请求网页
        PoolingHttpClient httpClient=new PoolingHttpClient();
        String content = httpClient.doGetHtml(iUri);

        //直接使用jsoup解析content
        Document doc = Jsoup.parse(content);
        //经过分析，南体大的新闻详情页的新闻内容包含在一个div class= wp_articlecontent里面
        //里面包含了若干个p标签 p标签的text就是新闻的主体内容
        //第一步先获取div
        Elements wp_articlecontent = doc.getElementsByClass("wp_articlecontent");
        Element div = wp_articlecontent.first();
        //第二步获取每个p标签的text,通过字符串拼接接起来
        Elements p = div.getElementsByTag("p");
        List<String> list = p.eachText();
        StringBuffer sb=new StringBuffer();
        for (String s : list) {
            sb.append(s);
        }
        String values = sb.toString();//得到内容
        //获取作者--> class="arti_publisher"的text
        Elements arti_publisher = doc.getElementsByClass("arti_publisher");
        Element span = arti_publisher.first();
        String author = span.text();//得到作者
        author=getAuthor(author);//处理一下
        //获取发布时间 --> class=arti_update 下的text
        Elements arti_update = doc.getElementsByClass("arti_update");
        Element span2 = arti_update.first();
        String date = span2.text();//得到时间
        date=getDate(date);//处理一下
        NewsItem newsItem=new NewsItem();
        newsItem.setNAuthor(author);//设置作者
        newsItem.setNValue(values);//设置内容
        newsItem.setNCreateTime(date);//设置发布时间
        return newsItem;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public String getAuthor(String str){
        //文章来源：党委宣传部、党委统战部
        String s = str.split("文章来源：")[1];
        return s;
    }
    public String getDate(String str){
        //发布时间：2022-03-02
        String s = str.split("发布时间：")[1];
        return s;
    }
}
